package com.hadoop.project.gen;

import com.hadoop.project.gen.maodaligendata.GenConstant;
import com.hadoop.project.gen.maodaligendata.GenHBaseData;
import com.hadoop.project.gen.maodaligendata.HBaseUtils;
import org.apache.hadoop.hbase.client.Connection;

import static com.hadoop.project.gen.maodaligendata.GenData.gen;

public class GenYourHBaseData {
//    public static void main(String[] args) throws Exception {
//        // 这里只需传入表名 列族会自动创建好
//        Connection conn = HBaseUtils.getConnection();
//
//        // 列族会自动创建好 创建完一次后记得注释 避免再次创建引起错误
//        HBaseUtils.createTable(conn, GenConstant.TableName);
//
//        // 生成数据
//        // 数据生成完毕后请到HBaseDemo.getAllData()测试数据是否存在 有问题
//        GenHBaseData.execute(GenConstant.TableName, 10, 10, 10);
//
//        // 如果你想要删除一个hbase表
//        // 为了安全起见 在这里仅提供一次只能删一个表的方法
//        // HBaseUtils.dropTable(conn,"example");
//    }



    //生成100万条数据要修改大小需要在GenData.java中修改
    public static void main(String[] args) {
        try {
            // HBase 表名，从 GenConstant 获取
            Connection conn = HBaseUtils.getConnection();
            HBaseUtils.createTable(conn, GenConstant.TableName);
            // --- HBase 表创建 ---
            // 首次运行时取消注释来创建表，之后注释掉避免重复创建出错。
            // 注意：HBaseUtils.createTable 需要确保能自动创建代码中用到的所有列族 ("tab", "user", "video", "userlog")
            // 如果 HBaseUtils.createTable 不能自动创建，需要手动指定或修改它。
            /*
            System.out.println("准备创建 HBase 表: " + tableName);
            try (Connection conn = HBaseUtils.getConnection()) {
                // 假设 createTable 会自动创建 tab, user, video, userlog 这几个列族
                HBaseUtils.createTable(conn, tableName);
                System.out.println("HBase 表 '" + tableName + "' 创建成功 (如果不存在)。");
            } catch (IOException e) {
                 // 表已存在通常会抛 TableExistsException，这里可以捕获并忽略
                 if (e instanceof org.apache.hadoop.hbase.TableExistsException) {
                     System.out.println("HBase 表 '" + tableName + "' 已存在，无需创建。");
                 } else {
                     System.err.println("创建 HBase 表时发生错误: " + e.getMessage());
                     e.printStackTrace();
                     return; // 创建失败则退出
                 }
            }
            */
            System.out.println("确认 HBase 表 '" + GenConstant.TableName + "' 存在并且包含列族: tab, user, video, userlog");

            // --- 生成数据 ---
            gen(GenConstant.TableName);

            // --- 测试数据 (可选) ---
            // 生成完毕后，可以调用 HBaseDemo.getAllData() 或类似方法来验证数据。
            // System.out.println("数据生成完毕，请使用 HBaseDemo.getAllData() 或 HBase shell 进行验证。");

        } catch (Exception e) {
            System.err.println("数据生成过程中发生严重错误: " + e.getMessage());
            e.printStackTrace(); // 打印详细错误堆栈
        } finally {
            // 如果 HBaseUtils.getConnection() 创建的 Connection 需要手动关闭（未使用 try-with-resources 管理），
            // 则应在此处关闭。但推荐在 HBaseUtils 中实现连接池或使用 try-with-resources。
            // HBaseUtils.closeConnection(); // 如果需要的话
        }
    }
}
